#ifndef __FLIGHT_SYSTEM__
#define __FLIGHT_SYSTEM__

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 128
typedef struct flight_t
{
    int id;               // 航班班次
    char flightName[MAX]; // 航班代号
    char flightType[MAX]; // 飞机机型
    char startCity[MAX];  // 航班起点站
    char startTime[MAX];  // 起飞时间 时:分
    char arriveCity[MAX]; // 航班终点站
    char arriveTime[MAX]; // 到达时间 时:分
    char flyTime[MAX];    // 飞行时间
    int value;            // 票价
    int maxNum;           // 额定载客量，
    int leftTable;        // 剩余座位数量
    char isFly;           // 是否起飞 ‘y’ ‘n’
} flight_t;

typedef struct fNode
{
    flight_t data; // 航班数据
    char time[MAX];
    struct fNode *before;
    struct fNode *after;
} fNode, *fList; // 存储航班信息

typedef struct dNode
{

    int n;              // 每天的航班数
    char time[MAX];     // 日期
    fList fl;           // 这一天的航班信息
    struct dNode *next; // 下一天的航班信息
} dNode, *dList;

typedef struct ticket // 票结构体
{
    char time[MAX];
    int id;
} ticket;

typedef struct record // 购票记录结构体
{
    ticket tickets[MAX]; // 票的标识信息
    int num;             // 票数
} record;

void print_menu(void); // 打印菜单,Ok

void print_file(FILE *fp); // 打印文件,Ok

void init_dlist(dList *dl); // 初始化天链表OK

void init_flist(fList *fl); // 初始化航班链表OK

void read_file_data(FILE *fp, dList dl); // 读取文件到链表NO

void print_dlist(dList dl); // 打印链表Ok

void insert_flight(dList dl); // 尾插入航班信息,有待完善

void change_flight(dList dl); // 修改航班（根据日期和班次修改)OK

void print_flight(fNode *fn); // 打印某个班次的航班信息;OK

void find_flight(dList dl); // 查询用户要求的航班;OK

void delete_flight(dList dl); // 删除指点班次航班Ok

void buy_ticket(dList dl, record *rl); // 买票

void return_ticket(dList dl, record *rl); // 退票

void my_tickets(dList dl, record *rl); // 查看购买的票

void init_record(record **rl); // 初始化购票记录

void exit_system(void); // 退出系统OK

void input_file(FILE *fp, dList dl); // 把链表数据写入到文件中

void sort_dlist(dList dl); // 航班排序

#endif
